//
//  WDRouterProtocols.h
//  Pods
//
//  Created by Alean on 2022/12/3.
//

#import <Foundation/Foundation.h>

extern NSString * const WDRouter_FirstDemo;
extern NSString * const WDRouter_SecondDemo;
extern NSString * const WDRouter_Demo;
extern NSString * const WDRouter_TestDemo_Page;
extern NSString * const WDRouter_UpdateView_Page;
extern NSString * const WDRouter_SystemWebView;
extern NSString * const WDRouter_DefineWebView;
extern NSString * const WDRouter_Regist;
extern NSString * const WDRouter_Login;
extern NSString * const WDRouter_Favour;//惠邻
extern NSString * const WDRouter_Enjoy;//优享
extern NSString * const WDRouter_Bean;//潮豆
extern NSString * const WDRouter_Order;//订单
extern NSString * const WDRouter_Mine;//我的
extern NSString * const WDRouter_Request_Location;//请求定位权限

typedef NSDictionary *(^didInitViewController)(UIViewController *viewController);

@protocol WDRouterProtocal <NSObject>

@optional
/**
 页面是否是单例（即在导航堆栈中只会保留一个页面，当跳转到该页面的时候会将其堆栈之上的页面都pop掉）
 默认是NO
 */
+ (BOOL)isSingleton;

/**
 设置该页面是否以push的方式进行切换，否则以present的方式打开。
 默认是YES
 */
+ (BOOL)shouldPresent;

/**
 设置该页面是否以pop的方式进行切换，否则以dismiss的方式打开。
 默认是NO
 */
+ (BOOL)shouldDimiss;

/**
 *  当前页面依赖其他页面的时候,先调出改页面，然后由开发者在被依赖的页面写代码发通知。
 例如，“个人中心”页面的显示依赖于登录页面，先弹出登录页面，在登录成功后做通知，把“个人中心“页面弹出来。
 *
 *  @return string
 */
+ (NSString *)relyingOnOtherUrlSchemeWithParams:(NSDictionary *)params;

/**
 导航控制器将要显示页面前，会调用handleWillOpenUrlWithParams:方法
 当返回NO时，将不弹出该页面，默认为YES；
 */
- (BOOL)handleWillOpenUrlWithParams:(NSDictionary *)params;

- (void)handleTransferPublicParams:(NSDictionary *)params;

/**
 *  设置页面间传递的参数，一般是第一个页面才会使用，之后的页面会自动传递。一般传递公用参数。
 *
 *  @param params  dic
 */
- (void)setPublicParams:(NSDictionary *)params;

/**
 *  用于页面间传数据，尽量避免调用此函数
 *
 *  @return map
 */
- (NSDictionary *)getPublicParams;

/**
 是否开启Public参数传递
 
 @return bool
 */
+ (BOOL)isEnablePublicParams;

@end

NS_ASSUME_NONNULL_BEGIN

@interface WDRouterProtocols : NSObject

@end

NS_ASSUME_NONNULL_END
